package models.saleman;

import address.Address;
import models.BaseModel;
import models.constants.DeletedStatus;
import models.enums.VisitStatus;
import models.weixin.WebUser;
import play.db.jpa.JPA;
import util.common.DateUtil;
import util.common.UStringUtil;

import javax.persistence.*;
import java.util.Date;
import java.util.List;

/**
 * 业务员任务明细表
 */

@Entity
@Table(name = "sale_man_task_items")
public class SaleManTaskItem extends BaseModel{


    /**
     * 业务员任务
     */
    @JoinColumn(name = "sale_man_task_id")
    @ManyToOne
    public SaleManTask saleManTask;

     /**
     * 客户
     */
    @JoinColumn(name = "web_user_id")
    @ManyToOne
    public WebUser webUser;

     /**
     * 客户地址
     */
    @JoinColumn(name = "address_id")
    @ManyToOne
    public Address defaultAddress;

    /**
     *  签到语音
     */
    @Column(name="sign_voice")
    public String signVoice ;

    /**
     *  签到语音 文本
     */
    @Column(name="sign_content")
    public String signContent ;

    /**
     *  签到时间
     */
    @Column(name="sign_at")
    @Temporal(TemporalType.TIMESTAMP)
    public Date signAt ;


    /**
     *  拜访 目标/目的
     */
    @Column(name="target_voice")
    public String targetVoice ;

    /**
     *  目的语音 文本
     */
    @Column(name="target_content")
    public String targetContent ;


    /**
     *  记录拜访目的的时间
     */
    @Column(name="record_target_at")
    @Temporal(TemporalType.TIMESTAMP)
    public Date recordTargetAt ;

    /**
     *  语音定位位置 ，地址
     */
    @Column(name="location_address")
    public String locationAddress ;

    /**
     *  语音定位位置 纬度
     */
    @Column(name="latitude")
    public String latitude ;

    /**
     *  语音定位位置 经度
     */
    @Column(name="longitude")
    public String longitude ;


    /**
     *  拜访结果
     *  NO_BEGIN  // 未开始
     *  ON_GOING  // 进行中
     *  END //结束
     */
    @Enumerated(EnumType.STRING)
    @Column(name="visit_status")
    public VisitStatus visitStatus;


    /**
     *  存在的问题
     */
    @Column(name="problem_voice")
    public String problemVoice ;

    /**
     *  存在的问题
     */
    @Column(name="existing_problems")
    public String existingProblems ;


    /**
     *  问题 分析
     */
    @Column(name="analysis_voice")
    public String analysisVoice ;


    /**
     *  问题 分析
     */
    @Column(name="analysis_problems")
    public String analysisProblems ;


    /**
     *  备注
     */
    @Column(name="remark")
    public String remark ;


    /**
     * 删除状态
     */
    @Enumerated(EnumType.ORDINAL)
    public DeletedStatus deleted ;

    /**
     *
     * @param id
     * @return
     */
    public static SaleManTaskItem findByItemId(long id){
        return  SaleManTaskItem.find("deleted = ?1 and id = ?2" , DeletedStatus.UN_DELETED , id).first() ;
    }

    /**
     * 计算任务明细数量
     * @param taskId
     * @return
     */
    public static long countBytaskId(long taskId){
        return SaleManTaskItem.count("deleted = ?1 and saleManTask.id = ?2" , DeletedStatus.UN_DELETED , taskId);
    }

    /**
     * 加载任务明细
     * @param taskId
     * @return
     */
    public static List<SaleManTaskItem> loadByTaskId(long taskId){
        return SaleManTaskItem.find("deleted = ?1 and saleManTask.id = ?2" ,DeletedStatus.UN_DELETED , taskId).fetch();
    }

    /**
     * 删除
     * @param delIds
     */
    public static void deletedByids(Long[] delIds){
        String idsStr = UStringUtil.concatStr("," ,delIds);
        String updateSql = "update Sale_man_task_items a set a.deleted = 1 where a.id in("+idsStr+")" ;
        JPA.em().createNativeQuery(updateSql).executeUpdate();

    }


    /**
     * 获取用户当日拜访任务进行中的任务
     * @param webUser
     * @param visitStatus
     * @return
     */
    public static SaleManTaskItem findByUserAndStatus(WebUser webUser , VisitStatus visitStatus){
        return SaleManTaskItem.find("deleted = ?1 and webUser = ?2 and visitStatus = ?3 and saleManTask.taskDate = ?4" , DeletedStatus.UN_DELETED , webUser , visitStatus, DateUtil.getBeginOfDay()).first();
    }

    /**
     * 获取用户当日任务的第一个任务
     * @param webUser
     * @return
     */
    public static SaleManTaskItem findByUser(WebUser webUser){
        return SaleManTaskItem.find("deleted = ?1 and saleManTask.taskDate = ?2 ",DeletedStatus.UN_DELETED , DateUtil.getBeginOfDay()).first();
    }



}
